//
// 数组
// Created by 麻再挺 on 2021/12/10.
//

#ifndef DATA_STRUCTURE_C_ARRAY_H
#define DATA_STRUCTURE_C_ARRAY_H

// 标准头文件, 提供变长参数使用
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include "../constant.h"

/**
 * 假设数组维数的最大值是 8
 */
#define MAX_ARRAY_DIM 8

/**
 * 元素类型
 */
typedef int AElemType;

/**
 * 数组结构
 */
typedef struct {
    // 数组元素基地址
    AElemType *base;
    // 维数
    int dim;
    // 数组维数基址
    int *bounds;
    // 数组映射常量地址, 索引地址
    int *constants;
} Array;

/**
 * 若维数 dim 和随后的各维数长度合法, 则构造相应的数组 A, 并返回 OK
 * @param arr 数组
 * @param dim 维数
 * @return
 */
Status Array_Init(Array *arr, int dim, ...);

/**
 * 销毁数组
 * @param arr 数组
 * @return
 */
Status Array_Destroy(Array *arr);

/**
 * n 维数组,  elem 元素变量, 随后是 n 个下标的值
 * @param arr n 维数组
 * @param elem 元素变量
 * @return
 */
Status Array_Value(Array *arr, AElemType *elem, ...);

/**
 * n 维数组,  elem 元素变量, 随后要赋的 n 个下标的值
 * @param arr n 维数组
 * @param elem 元素变量
 * @return
 */
Status Array_Assign(Array *arr, AElemType elem, ...);

/**
 * 打印数组
 * @param arr 数组
 */
void Array_Print(Array *arr);


#endif //DATA_STRUCTURE_C_ARRAY_H


















